/**
* NOTICE: ORIGINAL FILE MODIFIED
*/
package xlsx4j.workingwithworksheet;
import java.io.File;
import javax.xml.bind.JAXBException;
import org.apache.commons.io.FileUtils;
import org.docx4j.XmlUtils;
import org.docx4j.dml.CTBlip;
import org.docx4j.dml.CTBlipFillProperties;
import org.docx4j.dml.CTGeomGuideList;
import org.docx4j.dml.CTNonVisualDrawingProps;
import org.docx4j.dml.CTNonVisualPictureProperties;
import org.docx4j.dml.CTOfficeArtExtension;
import org.docx4j.dml.CTOfficeArtExtensionList;
import org.docx4j.dml.CTPictureLocking;
import org.docx4j.dml.CTPoint2D;
import org.docx4j.dml.CTPositiveSize2D;
import org.docx4j.dml.CTPresetGeometry2D;
import org.docx4j.dml.CTRelativeRect;
import org.docx4j.dml.CTShapeProperties;
import org.docx4j.dml.CTStretchInfoProperties;
import org.docx4j.dml.CTTransform2D;
import org.docx4j.dml.spreadsheetdrawing.CTAnchorClientData;
import org.docx4j.dml.spreadsheetdrawing.CTDrawing;
import org.docx4j.dml.spreadsheetdrawing.CTMarker;
import org.docx4j.dml.spreadsheetdrawing.CTPicture;
import org.docx4j.dml.spreadsheetdrawing.CTPictureNonVisual;
import org.docx4j.dml.spreadsheetdrawing.CTTwoCellAnchor;
import org.docx4j.openpackaging.io.SaveToZipFile;
import org.docx4j.openpackaging.packages.SpreadsheetMLPackage;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.DrawingML.Drawing;
import org.docx4j.openpackaging.parts.SpreadsheetML.WorksheetPart;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
import org.docx4j.relationships.Relationship;
public class AddImageXlsx4j
{
public static void main(String[] args) throws Exception {
String outputfilepath = System.getProperty("user.dir") + "/data/xlsx4j/AddImage-Xlsx4j.xlsx";
String imagefilePath = System.getProperty("user.dir") + "/data/xlsx4j/greentick.png" ;
SpreadsheetMLPackage pkg = SpreadsheetMLPackage.createPackage();
WorksheetPart worksheet = pkg.createWorksheetPart(new PartName("/xl/worksheets/sheet1.xml"), "Sheet1", 1);
// Create Drawing part and add to sheet
Drawing drawingPart = new Drawing();
Relationship drawingRel = worksheet.addTargetPart(drawingPart);
// Add anchor XML to worksheet
org.xlsx4j.sml.CTDrawing drawing = org.xlsx4j.jaxb.Context.getsmlObjectFactory().createCTDrawing();
worksheet.getJaxbElement().setDrawing(drawing);
drawing.setId( drawingRel.getId() );
// Create image part and add to Drawing part
BinaryPartAbstractImage imagePart
= BinaryPartAbstractImage.createImagePart(pkg, drawingPart,
FileUtils.readFileToByteArray(new File(imagefilePath) ));
String imageRelID = imagePart.getSourceRelationship().getId();
// Create and set drawing part content
// Take your pick ..
// .. build it using code
// drawingPart.setJaxbElement(
// buildDrawingPartContentUsingCode(imageRelID));
// .. or build it from an XML string
drawingPart.setJaxbElement(
buildDrawingPartContentFromXmlString(imageRelID));
// Save the xlsx
SaveToZipFile saver = new SaveToZipFile(pkg);
saver.save(outputfilepath);
System.out.println("\n\n done .. " + outputfilepath);
}
/**
* This code generated using http://webapp.docx4java.org/OnlineDemo/PartsList.html
* "Method 1"
*/
public static CTDrawing buildDrawingPartContentUsingCode(String imageRelID) {
org.docx4j.dml.spreadsheetdrawing.ObjectFactory dmlspreadsheetdrawingObjectFactory = new org.docx4j.dml.spreadsheetdrawing.ObjectFactory();
CTDrawing drawing = dmlspreadsheetdrawingObjectFactory.createCTDrawing();
// JAXBElement<org.docx4j.dml.spreadsheetdrawing.CTDrawing> drawingWrapped = dmlspreadsheetdrawingObjectFactory.createWsDr(drawing);
// Create object for twoCellAnchor
CTTwoCellAnchor twocellanchor = dmlspreadsheetdrawingObjectFactory.createCTTwoCellAnchor();
drawing.getEGAnchor().add( twocellanchor);
// Create object for clientData
CTAnchorClientData anchorclientdata = dmlspreadsheetdrawingObjectFactory.createCTAnchorClientData();
twocellanchor.setClientData(anchorclientdata);
// Create object for pic
CTPicture picture = dmlspreadsheetdrawingObjectFactory.createCTPicture();
twocellanchor.setPic(picture);
org.docx4j.dml.ObjectFactory dmlObjectFactory = new org.docx4j.dml.ObjectFactory();
// Create object for blipFill
CTBlipFillProperties blipfillproperties = dmlObjectFactory.createCTBlipFillProperties();
picture.setBlipFill(blipfillproperties);
// Create object for blip
CTBlip blip = dmlObjectFactory.createCTBlip();
blipfillproperties.setBlip(blip);
blip.setCstate(org.docx4j.dml.STBlipCompression.NONE);
blip.setEmbed( imageRelID );
// Create object for extLst
CTOfficeArtExtensionList officeartextensionlist = dmlObjectFactory.createCTOfficeArtExtensionList();
blip.setExtLst(officeartextensionlist);
// Create object for ext
CTOfficeArtExtension officeartextension = dmlObjectFactory.createCTOfficeArtExtension();
officeartextensionlist.getExt().add( officeartextension);
officeartextension.setUri( "{28A0092B-C50C-407E-A947-70E740481C1C}");
blip.setLink( "");
// Create object for stretch
CTStretchInfoProperties stretchinfoproperties = dmlObjectFactory.createCTStretchInfoProperties();
blipfillproperties.setStretch(stretchinfoproperties);
// Create object for fillRect
CTRelativeRect relativerect = dmlObjectFactory.createCTRelativeRect();
stretchinfoproperties.setFillRect(relativerect);
relativerect.setR( new Integer(0) );
relativerect.setT( new Integer(0) );
relativerect.setL( new Integer(0) );
relativerect.setB( new Integer(0) );
// Create object for spPr
CTShapeProperties shapeproperties = dmlObjectFactory.createCTShapeProperties();
picture.setSpPr(shapeproperties);
// Create object for xfrm
CTTransform2D transform2d = dmlObjectFactory.createCTTransform2D();
shapeproperties.setXfrm(transform2d);
transform2d.setRot( new Integer(0) );
// Create object for off
CTPoint2D point2d = dmlObjectFactory.createCTPoint2D();
transform2d.setOff(point2d);
point2d.setY( 0 );
point2d.setX( 0 );
// Create object for ext
CTPositiveSize2D positivesize2d = dmlObjectFactory.createCTPositiveSize2D();
transform2d.setExt(positivesize2d);
positivesize2d.setCx( 714375 );
positivesize2d.setCy( 714375 );
// Create object for prstGeom
CTPresetGeometry2D presetgeometry2d = dmlObjectFactory.createCTPresetGeometry2D();
shapeproperties.setPrstGeom(presetgeometry2d);
// Create object for avLst
CTGeomGuideList geomguidelist = dmlObjectFactory.createCTGeomGuideList();
presetgeometry2d.setAvLst(geomguidelist);
presetgeometry2d.setPrst(org.docx4j.dml.STShapeType.RECT);
// Create object for nvPicPr
CTPictureNonVisual picturenonvisual = dmlspreadsheetdrawingObjectFactory.createCTPictureNonVisual();
picture.setNvPicPr(picturenonvisual);
// Create object for cNvPr
CTNonVisualDrawingProps nonvisualdrawingprops = dmlObjectFactory.createCTNonVisualDrawingProps();
picturenonvisual.setCNvPr(nonvisualdrawingprops);
nonvisualdrawingprops.setDescr( "");
nonvisualdrawingprops.setName( "Picture 1");
nonvisualdrawingprops.setId( 2 );
// Create object for cNvPicPr
CTNonVisualPictureProperties nonvisualpictureproperties = dmlObjectFactory.createCTNonVisualPictureProperties();
picturenonvisual.setCNvPicPr(nonvisualpictureproperties);
// Create object for picLocks
CTPictureLocking picturelocking = dmlObjectFactory.createCTPictureLocking();
nonvisualpictureproperties.setPicLocks(picturelocking);
picture.setMacro( "");
// Create object for to
CTMarker marker = dmlspreadsheetdrawingObjectFactory.createCTMarker();
twocellanchor.setTo(marker);
marker.setCol(1);
marker.setColOff( 104775 );
marker.setRow(3);
marker.setRowOff( 142875 );
// Create object for from
CTMarker marker2 = dmlspreadsheetdrawingObjectFactory.createCTMarker();
twocellanchor.setFrom(marker2);
marker2.setCol(0);
marker2.setColOff( 0 );
marker2.setRow(0);
marker2.setRowOff( 0 );
twocellanchor.setEditAs(org.docx4j.dml.spreadsheetdrawing.STEditAs.ONE_CELL);
// return drawingWrapped;
return drawing;
}
/**
* This code generated using http://webapp.docx4java.org/OnlineDemo/PartsList.html
* "Method 2"
*/
public static CTDrawing buildDrawingPartContentFromXmlString(String imageRelID) throws JAXBException {
String openXML = "<xdr:wsDr xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:a14=\"http://schemas.microsoft.com/office/drawing/2010/main\" xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">"
+ "<xdr:twoCellAnchor editAs=\"oneCell\">"
+ "<xdr:from>"
+ "<xdr:col>0</xdr:col>"
+ "<xdr:colOff>0</xdr:colOff>"
+ "<xdr:row>0</xdr:row>"
+ "<xdr:rowOff>0</xdr:rowOff>"
+"</xdr:from>"
+ "<xdr:to>"
+ "<xdr:col>1</xdr:col>"
+ "<xdr:colOff>104775</xdr:colOff>"
+ "<xdr:row>3</xdr:row>"
+ "<xdr:rowOff>142875</xdr:rowOff>"
+"</xdr:to>"
+ "<xdr:pic>"
+ "<xdr:nvPicPr>"
+ "<xdr:cNvPr id=\"2\" name=\"Picture 1\"/>"
+ "<xdr:cNvPicPr>"
+ "<a:picLocks noChangeAspect=\"1\"/>"
+"</xdr:cNvPicPr>"
+"</xdr:nvPicPr>"
+ "<xdr:blipFill>"
+ "<a:blip r:embed=\"" + imageRelID + "\">"
+ "<a:extLst>"
+ "<a:ext uri=\"{28A0092B-C50C-407E-A947-70E740481C1C}\">"
+ "<a14:useLocalDpi val=\"0\"/>"
+"</a:ext>"
+"</a:extLst>"
+"</a:blip>"
+ "<a:stretch>"
+ "<a:fillRect/>"
+"</a:stretch>"
+"</xdr:blipFill>"
+ "<xdr:spPr>"
+ "<a:xfrm>"
+ "<a:off x=\"0\" y=\"0\"/>"
+ "<a:ext cx=\"714375\" cy=\"714375\"/>"
+"</a:xfrm>"
+ "<a:prstGeom prst=\"rect\">"
+ "<a:avLst/>"
+"</a:prstGeom>"
+"</xdr:spPr>"
+"</xdr:pic>"
+ "<xdr:clientData/>"
+"</xdr:twoCellAnchor>"
+"</xdr:wsDr>";
return (CTDrawing)XmlUtils.unwrap(
XmlUtils.unmarshalString(openXML));
}
}